package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

type Aaa2 struct {
	Id int
	A1 string
	A2 string
	// 一对多写这个
	//Bbb []Bbb2 // 这里属性的名称 必须和 下面的 Preload() 函数内填入的一样，不然无法映射到对应关系
}

type Bbb2 struct {
	Id     int
	B1     string
	B2     string
	Aaa2Id int
	// 如果想要查询 Bbb2 表多对一 Aaa2 表，就要写上这个，然后去查B表，结构体Aaa2里面的属性Bbb就不要定义了
	Aaa Aaa2 `gorm:"foreignkey:Aaa2Id; references:Id;"`
}

func main() {
	db, err := gorm.Open("mysql", "root:123456@(127.0.0.1:3306)/db1?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	// 自动创建表  自动迁移 （把结构体和数据表进行映射）
	db.AutoMigrate(&Aaa2{})
	db.AutoMigrate(&Bbb2{})

	// 插入测试数据，查询使用
	//bbb := Bbb2{
	//	Id:     1,
	//	B1:     "B1",
	//	B2:     "B2",
	//	Aaa2Id: 1,
	//}
	//bbb2 := Bbb2{
	//	Id:     2,
	//	B1:     "B1",
	//	B2:     "B2",
	//	Aaa2Id: 1,
	//}
	//aaa := Aaa2{
	//	Id: 1,
	//	A1: "A1",
	//	A2: "A2",
	//}
	//
	//db.Create(aaa)
	//db.Create(bbb)
	//db.Create(bbb2)

	var a Aaa2   // 一对多
	var b []Bbb2 // 多对一

	db.Preload("Bbb").Find(&a)
	db.Preload("Aaa").Find(&b)

	fmt.Println(a)
	fmt.Println(b)
}
